package com.study.design.singleton;

import net.bytebuddy.utility.privilege.SetAccessibleAction;

/**
 * 利用静态内部类延迟加载的特性。
 * <p>
 * 当 Singleton 类加载时，静态内部类 SingletonHolder 没有被加载进内存。
 * 只有当调用 getUniqueInstance() 方法从而触发 SingletonHolder.INSTANCE 时 SingletonHolder 才会被加载，
 * 此时初始化 INSTANCE 实例，并且 JVM 能确保 INSTANCE 只被实例化一次。
 * 这种方式不仅具有延迟初始化的好处，而且由 JVM 提供了对线程安全的支持。
 *
 * @Author 网易云课堂微专业-java高级开发工程师【allen老师】
 * @Version 1.0
 */
public class Singleton5 {

    private Singleton5() {
    }

    public static Singleton5 getUniqueInstance() {
        return SingletonHolder.INSTANCE;
    }

    // 静态内部类 + 静态内部域
    private static class SingletonHolder {
        private static final Singleton5 INSTANCE = new Singleton5();
    }

}
